《高性能網(wǎng)站建設(shè)指南》閱讀筆記_規(guī)則13- 配置ETag
發(fā)布時(shí)間:2013-11-22 瀏覽:394打印字號(hào):大中小
ETag:實(shí)體標(biāo)簽,是web服務(wù)器和瀏覽器用于確認(rèn)緩存組件的有效性的一種機(jī)制。是唯一標(biāo)識(shí)了一個(gè)組件的一個(gè)特定版本的字符串.IIS上的ETag格式是Filetimestamp:ChangeNumber即;時(shí)間戳和跟蹤IIS配置變化的計(jì)數(shù)器組成的字符串。
工作機(jī)制:
前面提到過(guò),檢測(cè)組件是否有效時(shí),是通過(guò)Web服務(wù)器與客戶端緩存的組件進(jìn)行匹配的。有兩種方式:
--比較最新修改日期
原始服務(wù)器通過(guò)的Last-Modified響應(yīng)頭來(lái)返回組建的最新修改日期,瀏覽器通過(guò)If-Modefied-since進(jìn)行比較判斷,如果匹配則返回304(not Modefied),避免了200請(qǐng)求
-- 比較ETag實(shí)體標(biāo)簽
服務(wù)器傳遞客戶端組件一個(gè)ETag,如:
服務(wù)器發(fā)送ETag:"10c24bc-4ab-457e1c1f"
此后,如果瀏覽器驗(yàn)證該組件,則會(huì)使用If-None-Match頭將ETag傳回原始服務(wù)器,如:
瀏覽器發(fā)送If-None-Match:"10c24bc-4ab-457e1c1f"
如果相同,則服務(wù)器返回304 Not Modified
如果不相同,則服務(wù)器重新向?yàn)g覽器發(fā)送該組件。
如果一個(gè)網(wǎng)站有多臺(tái)服務(wù)器,那么,對(duì)于完全相同的組件,從一臺(tái)服務(wù)器到另一臺(tái)服務(wù)器,IIS產(chǎn)生的ETag是不會(huì)匹配的。就是說(shuō)如果有10臺(tái)服務(wù)器,用戶得到正確304響應(yīng)的幾率只有10%,其余的90%都會(huì)得到200響應(yīng)并下載所有的數(shù)據(jù),
需要注意的是:ETag的服務(wù)器返回(If-None-Match)比最新修改日期的返回(If-Modified-Since)具有更高的優(yōu)先級(jí)。如果同時(shí)存在,則會(huì)禁止返回304 Not Modified。
建議:
ETag只用在單個(gè)服務(wù)器的網(wǎng)站上,在多服務(wù)器的網(wǎng)站上,可以修改ETag格式(如:IIS中實(shí)現(xiàn)從ETag中移除ChangeNumber,只留時(shí)間戳),但這樣和Last-Modified頭是等效的。所以最好將ETag完全移除,已避免組件的重復(fù)下載。
如何在IIS中移除ETag,參考:
http://support.microsoft.com/?id=922733
http://support.microsoft.com/?id=922703


